Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Как лучше хранить данные (VitaliyM)
Author Message
VitaliyM
Участник форума



Joined: 19 Jul 2005
Posts: 283
Карма: 10
   поощрить/наказать


PostPosted: Wed Jan 25, 2006 3:56 pm (написано за 6 минут 35 секунд)
   Post subject: Как лучше хранить данные
Reply with quote

Есть довольно большая база в текстовых файлах. Описания компаний, списки вакансий, резюме специалистов. Проблема, вообщем-то, банальна. Надо как-то помечать просмотренные резюме/вакансии и не показывать их больше конкретному пользователю. Вот только как реализовать сию незатейливость и не хранить на серваке кучу бессмысленных данных (типа пользователь №123 просмотрел вакансии №№ 1, 5, 35 и т.д.). Точнее, хранить, видимо, придется по-любому, вот только как это сделать рациональнее. В файле с самими вакансиями (поле добавить) или отдельно (лишнее обращение к диску), или еще как. Куки использовать нельзя.
Мне кажется, лучше было бы в отдельный файл запихнуть. Но может я не прав, в смысле эффективности?
Буду благодарен за любые мысли по этому поводу.
Back to top
View user's profile Send private message Send e-mail
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Wed Jan 25, 2006 10:42 pm (спустя 6 часов 45 минут; написано за 1 минуту 35 секунд)
   Post subject:
Reply with quote

Лучше — хранить в базе.
«На файлах» у Вас всё равно выйдет в итоге некая имитация базы данных, только тормознее и запутаннее...
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Thu Jan 26, 2006 2:44 am (спустя 4 часа 2 минуты; написано за 51 секунду)
   Post subject:
Reply with quote

Лучше в базе. Но и база может быть всего в одном файле (например, можно использовать SQLite - она для небольших объёмов просто идеальна).
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Thu Jan 26, 2006 2:46 am (спустя 1 минуту 57 секунд)
   Post subject:
Reply with quote


М

Перенесено из форума: Разное :: Perl.
Перенесено в форум: Прочее.
Back to top
View user's profile Send private message Send e-mail
VitaliyM
Участник форума



Joined: 19 Jul 2005
Posts: 283
Карма: 10
   поощрить/наказать


PostPosted: Thu Jan 26, 2006 8:06 am (спустя 5 часов 19 минут; написано за 6 минут 34 секунды)
   Post subject:
Reply with quote

Большое спасибо за ответы, но проблема как раз в том и состоит, что MySQL (как, впрочем, и любую другую БД) использовать нельзя. Нельзя использовать и готовые модули, типа SQLight. Иначе и проблемы, собственно, и небыло бы. То что "запутаннее" - это точно. Я накропал небольшой модуль. В процессе работы приходится постоянно что-то дописывать. К чему я приду в итоге - уже видно. Будет что-то типа SQLight, только заведомо глючнее и, возможно, с меньшим функционалом, так как делается наспех. Но выхода нет, приходится делать. Потому, всеже, повторю вопрос: как по Вашему мнению эффективнее будет хранить данные о просмотрах (и иже с ними - количество резюме, добавленных на определенную вакансию, количество одобренных/отклоненных и т.п.) - в отдельных файлах или цеплять в хвост дополнительные поля? Может существует еще какой-либо вариант? Хотелось бы еще эффективность оценивать именно с точки зрения обработки на Perl.
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Thu Jan 26, 2006 3:09 pm (спустя 7 часов 3 минуты; написано за 2 минуты 30 секунд)
   Post subject:
Reply with quote

VitaliyM wrote:
SQLight
SQLite это пишется. Можете объяснить, почему вам легче париться и писать свой какой-то модуль (который, я 100% уверен, даже близко не будет стоять с SQLite), нежели поставить и использовать SQLite? Думаю, поговорив с хостером (если с ним проблемы), его можно уломать...

Всё остальное - честно говоря мне лень задумываться над вопросом, который заведомо заключает в себе рутину.
Back to top
View user's profile Send private message Send e-mail
VitaliyM
Участник форума



Joined: 19 Jul 2005
Posts: 283
Карма: 10
   поощрить/наказать


PostPosted: Thu Jan 26, 2006 3:42 pm (спустя 32 минуты; написано за 10 минут 57 секунд)
   Post subject:
Reply with quote

Ant wrote:
SQLite это пишется.
Сорри, опечатка
Ant wrote:
...почему вам легче париться и писать свой какой-то модуль (который, я 100% уверен, даже близко не будет стоять с SQLite), нежели поставить и использовать SQLite? Думаю, поговорив с хостером (если с ним проблемы), его можно уломать...
Мне-то легче загнать все в MySQL и не морочить себе голову. Проблема не в хостере - у нас выделенный сервак, а в нашем "ведущем программисте". У человека представления о web середины 90-х. А уж очень настаивать на своих взглядах пока не могу - я в этой компании человек новый, пока на испытательном сроке. Вот и приходиться извращениями заниматься. Может, когда на постоянной основе работать буду - удасться кое-чего ему пропихнуть, а пока так.

В принципе вопрос сводится на данный момент к следующему: какой размер не должен превышать файл данных, чтобы полнотекстовый поиск по нему не затягивался до неприличия. Отсюда буду уж смотреть, куда лучше пихать инфу. Сам, пока, склоняюсь к отдельному файлу. может есть какие-то общие принципы, которыми следует руководствоваться при хранении данных в файлах?
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Thu Jan 26, 2006 3:59 pm (спустя 17 минут; написано за 4 минуты 40 секунд)
   Post subject:
Reply with quote

VitaliyM wrote:
В принципе вопрос сводится на данный момент к следующему: какой размер не должен превышать файл данных, чтобы полнотекстовый поиск по нему не затягивался до неприличия.
На самом деле тут палка на двух концах. Когда я писал DNSearch (он работает прямым перебором файлов), я столкнулся с двумя основными этапами, которые занимали бОльшую часть времени работы посика: сбор всех файлов в один списов и поиск в этих файлах. То есть если у вас будет большое количество (путь даже маленьких файлов) и вы все их будете собирать - это займёт очень большое количество времени.

Тут всё зависит от алгоритма. Применительно к нему надо делать тесты. Идеально - всё хранить в одном-двух файлах. Но при этом очень важна организация данных внутри этого файла.
VitaliyM wrote:
а в нашем "ведущем программисте
Дык, SQLite - это не MySQL (первый - это не сервер, а модуль, через который информация складывается/извлекается в файл). Попробуйте лучше убедить ведущего программсита в том, что это простой файл. (-:
Back to top
View user's profile Send private message Send e-mail
VitaliyM
Участник форума



Joined: 19 Jul 2005
Posts: 283
Карма: 10
   поощрить/наказать


PostPosted: Thu Jan 26, 2006 4:10 pm (спустя 10 минут; написано за 11 минут 22 секунды)
   Post subject:
Reply with quote

Правильно ли я понял, что поиск по одному большому (до нескольких Мб) файлу - допустимая нагрузка? Тесты разных способов делаю и похоже прихожу к структуре из 3-4 файлов. Но результаты на моей локальной машине могут ведь довольно сильно отличаться от аналогичных результатов на серваке, не так ли?
Ant wrote:
Дык, SQLite - это не MySQL (первый - это не сервер, а модуль, через который информация складывается/извлекается в файл). Попробуйте лучше убедить ведущего программсита в том, что это простой файл. (-:
Это я знаю. Если не ошибаюсь, мы с Вами на эту тему и говорили уже :). Модуль я ему показал. На что мне после пятиминутного просмотра исходного кода сказали, что "модуль тяжелый и вообще, мы всегда все пишем сами". Слава богу, хоть Image::Magick можно использовать. Надо было и его тоже "самим писать"! Так что в эту сторону, пока по крайней мере, тупик.
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Thu Jan 26, 2006 5:45 pm (спустя 1 час 35 минут; написано за 3 минуты 11 секунд)
   Post subject:
Reply with quote

VitaliyM wrote:
Правильно ли я понял, что поиск по одному большому (до нескольких Мб) файлу - допустимая нагрузка?
По идее, несколько МБ - это копейки. Их можно прямо в оперативную память совать целиком (читать из файла в переменную). Это вполне допустимо (главное, чтобы ничего не намудрить с алгоритмом обработки). Если же речь будет идти о 100 мб и более - то придётся оптимизировать работу так, чтобы одновременно не работать со всем файлом (а с его частями). Но это всё, конечно же, очень субъективно, ибо у вас может быть свой сервер с парами гигов оперативки - тогда и 500мб файл - не проблема. (-:
VitaliyM wrote:
На что мне после пятиминутного просмотра исходного кода сказали, что "модуль тяжелый и вообще, мы всегда все пишем сами".
Мдя, это уже клиника.
Back to top
View user's profile Send private message Send e-mail
Алексей С.
Участник форума



Joined: 11 Nov 2004
Posts: 103
Карма: 1
   поощрить/наказать


PostPosted: Thu Jan 26, 2006 6:35 pm (спустя 49 минут; написано за 11 минут 45 секунд)
   Post subject:
Reply with quote

VitaliyM wrote:
 На что мне после пятиминутного просмотра исходного кода сказали, что "модуль тяжелый и вообще, мы всегда все пишем сами".
уходите из такой конторы, потому что это бред.
Back to top
View user's profile Send private message
VitaliyM
Участник форума



Joined: 19 Jul 2005
Posts: 283
Карма: 10
   поощрить/наказать


PostPosted: Fri Jan 27, 2006 7:28 am (спустя 12 часов 53 минуты; написано за 3 минуты 17 секунд)
   Post subject:
Reply with quote

Ant
Спасибо за ответы. Вы мне действительно очень помогли. Я, если честно, думал, что файл метров на 20 - уже перебор. Дальше буду ворочаться сам.

Алексей С.
Легко сказать! Было бы куда - ушел бы. Но тут из того, что есть - это еще чуть ли не лучший вариант :(. Так что остается только надееться, что удасться со временем что-то изменить.
Back to top
View user's profile Send private message Send e-mail
Алексей С.
Участник форума



Joined: 11 Nov 2004
Posts: 103
Карма: 1
   поощрить/наказать


PostPosted: Fri Jan 27, 2006 10:23 am (спустя 2 часа 55 минут; написано за 41 секунду)
   Post subject:
Reply with quote

VitaliyM бороться против системы бесполезно. это факт. можно либо принять систему либо нет. это уже вам решать
Back to top
View user's profile Send private message
VitaliyM
Участник форума



Joined: 19 Jul 2005
Posts: 283
Карма: 10
   поощрить/наказать


PostPosted: Fri Jan 27, 2006 4:25 pm (спустя 6 часов 1 минуту; написано за 1 минуту 11 секунд)
   Post subject:
Reply with quote

Алексей С. wrote:
VitaliyM бороться против системы бесполезно. это факт. можно либо принять систему либо нет. это уже вам решать
Нуу... Это как сказать. Вода и камень точет.
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Fri Jan 27, 2006 4:30 pm (спустя 4 минуты; написано за 8 секунд)
   Post subject:
Reply with quote

Либо создать свою систему 8*)
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Fri Jan 27, 2006 8:50 pm (спустя 4 часа 20 минут; написано за 1 минуту 8 секунд)
   Post subject:
Reply with quote

VitaliyM wrote:
 Я, если честно, думал, что файл метров на 20 - уже перебор.
Сам файл в 20 метров - это абсолютно субъективный объект, ничего ровным счётом о себе не говорящий. Надо смотреть, как он используется. В том числе, сколько одновременно работающих копий скрипта будут выполняться. (-:
Back to top
View user's profile Send private message Send e-mail
VitaliyM
Участник форума



Joined: 19 Jul 2005
Posts: 283
Карма: 10
   поощрить/наказать


PostPosted: Mon Jan 30, 2006 8:03 am (спустя 2 дня 11 часов 13 минут; написано за 1 минуту 2 секунды)
   Post subject:
Reply with quote

Ant
Это понятно. Думаю, одновременных запросов к файлу будет немного, так что, в свете сказанного выше, проблемы не возникнет.
Back to top
View user's profile Send private message Send e-mail
VitaliyM
Участник форума



Joined: 19 Jul 2005
Posts: 283
Карма: 10
   поощрить/наказать


PostPosted: Fri Feb 10, 2006 2:48 pm (спустя 11 дней 6 часов 44 минуты; написано за 8 минут 38 секунд)
   Post subject:
Reply with quote

И снова здравствуйте. Я опять в свою дуду. Проблема в следующем: есть функция, выполняющая поиск по вышеупомянутой базе. Задача была, чтобы в качестве условия функция принимала строку вида:
Code (perl): скопировать код в буфер обмена
$cond="`name`='Vasya' && `type`=$FORM{type}"
При этом, все, что в ``, заменяется значениями хеша, в который считан файл. То есть, например, `name` --> $data{name}. В принципе, ничего сложного, все сделал. Но теперь надо сделать возможность поиска без учета регистра. Если просто преобразовать $cond к нижниму регистру, $FORM ведь тоже в $form превратится. Можно этого както избежать? Или я вообще бред несу? Можно, конечно, передавать только имена переменных, состоящие из маленьких букв, но использовать будет неудобно.
На всякий случай: пример должне принять вид:
Code (perl): скопировать код в буфер обмена
$cond="`name`='[b]v[/b]asya' && `type`=$[b]FORM[/b]{type}"
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Wed Feb 15, 2006 1:00 pm (спустя 4 дня 22 часа 12 минут; написано за 44 секунды)
   Post subject:
Reply with quote

1.
Ant wrote:
честно говоря мне лень задумываться над вопросом, который заведомо заключает в себе рутину
2. А как вы ищите в итоге? Вообще, зачем всё строку приводить к какому-либо регистру. Не будете же вы искать прямо по этой строке...
Back to top
View user's profile Send private message Send e-mail
VitaliyM
Участник форума



Joined: 19 Jul 2005
Posts: 283
Карма: 10
   поощрить/наказать


PostPosted: Wed Feb 15, 2006 1:33 pm (спустя 32 минуты; написано за 8 секунд)
   Post subject:
Reply with quote

Ant wrote:
А как вы ищите в итоге
Code (perl): скопировать код в буфер обмена
if(eval (www.perldoc.com/perl5.6/pod/func/eval.html)($cond))
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 129
   поощрить/наказать


PostPosted: Wed Feb 15, 2006 2:02 pm (спустя 29 минут; написано за 1 минуту 5 секунд)
   Post subject:
Reply with quote

Что-то я вообще ничего не понял. Может, не "=", а "eq" уж тогда? Во-вторых, как-то всё сложно. НЕ проще ли регулярные выражения задействовать? Лучше пересмотрите алгоритм. ИМХО.
Back to top
View user's profile Send private message Send e-mail
VitaliyM
Участник форума



Joined: 19 Jul 2005
Posts: 283
Карма: 10
   поощрить/наказать


PostPosted: Wed Feb 15, 2006 3:00 pm (спустя 57 минут; написано за 8 минут 18 секунд)
   Post subject:
Reply with quote

Ant wrote:
"=", а "eq"
Да, конечно. Извините.

На счет алгоритма. Почему сложно? Нужно сделать альтернативу нормальным SQL-запросам. То есть, можно и общепринятый синтаксис использовать, но смысла ограничивать структуру запроса не вижу. Да и если стандартный синтаксис использовать, проблемы те же. Поля "таблиц" хранятся в хеше. Надо, как-то подставлять значение вместо имени поля. eval показался оптимальным вариантом. Можно, конечно и регами заменять, но смысл, по-моему, тот же будет. Как-то надо определять, где менять регистр, а где нет.

Хотя, только сейчас пришло в голову: а ведь тот же MySQL НЕ ИЩЕТ САМ без учета регистра! И можно тот-же принцип использовать. Строить запрос вида:
Code (perl): скопировать код в буфер обмена
$cond="LCASE(`name`) eq LCASE('Vasya') && `type` eq $FORM{type}"
На первый взгляд, проблем не возникнет. Регами разобрать и все. Сегодня попробую.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML